package com.ln.sms.service;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.ln.sms.model.RecivedSmsVO;
import com.ln.sms.model.SendSmsVO;
import com.ln.sms.util.SmsConfig;
import com.ln.sms.webservice.WebService;
import com.ln.sms.webservice.WebServiceSoap;

public class SmsLibService {

	private SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

	private WebServiceSoap wb;
	
	protected SmsLibService() {
		this.wb = new WebService().getWebServiceSoap();
	}

	/**
	 * 取得Webservice获得更多功能
	 * 
	 * @return
	 */
	public WebServiceSoap getWbService() {
		return wb;
	}

	/**
	 * 函数返回值：String（唯一标识，即当前发送短信批次的唯一标识,和rrid对应，如为空则返回系统生成的rrid）
	 * 
	 * @param sms
	 * @return
	 */
	public boolean sendSms(SendSmsVO sms) {
		String rrid = "";
		String stime = null;
		if (sms.getStime() != null) {
			stime = formatter.format(sms.getStime());
			rrid = wb.mt(SmsConfig.sn, SmsConfig.md5SnPwd, sms.getMobile(), sms.getContent(), sms.getExt(), stime, sms.getRrid());
		} else {
			sms.setStime(new Date());
			rrid = wb.sendSMS(SmsConfig.sn, SmsConfig.pwd, sms.getMobile(), sms.getContent());
		}
		sms.setRrid(rrid);
		return true;
	}

	/**
	 * 发送短信：sn软件序列号;pwd序列号密码;mobile手机号列表，以逗号,隔开;content发送内容
	 * 
	 * @param mobile
	 * @param content
	 * @return
	 */
	public boolean sendMsg(String mobile, String content) {
		SendSmsVO sms = new SendSmsVO(mobile, content);
		return this.sendSms(sms);
	}

	/**
	 * 未实现 群发短信,String（唯一标识，即当前发送短信批次的唯一标识,和rrid对应，如为空则返回系统生成的rrid）此方法推荐用于大量群发.内容相同手机号多个
	 * 
	 * @param smsList
	 * @return
	 */
	public String sendSms(List<SendSmsVO> smsList) {
		// wb.mt(sn, pwd, mobile, content, ext, stime, rrid);
		return null;
	}

	/**
	 * 函数返回值：Stirng 返回值说明：mo ID，特服号，手机号，内容（对内容进行gb2312解码），时间 如有多条回车换行隔开 \n
	 * 
	 * @return
	 */
	public List<RecivedSmsVO> recivedSms() {
		List<RecivedSmsVO> smsList = new ArrayList<RecivedSmsVO>();
		// 注:拆分形式为 先\n拆分成数组,然后逗号拆分成数组.根据索引读出需要的数据.内容要GB2312解码。
		// 如果发送时ext=3 用子号3发送了 那么调用mo之后 第二个参数47512 就变成了475123了由此可以判断用户是回复的那条短信或者哪个应用!
		String sms = wb.mo(SmsConfig.sn, SmsConfig.md5SnPwd);
		try {
			sms = java.net.URLDecoder.decode(sms, "GB2312");
			String[] msgs = sms.split("\n");
			for (String m : msgs) {
				String[] items = m.split(",");
				RecivedSmsVO vo = new RecivedSmsVO();
				vo.setMoId(items[0]);
				vo.setSpNumber(items[1]);
				vo.setMobile(items[2]);
				vo.setContent(items[3]);
				vo.setRtime(formatter.parse(items[4]));
				smsList.add(vo);
			}
		} catch (Exception e) {
			if(!"1".endsWith(sms)) {
				System.out.println(sms);
			}
		}
		return smsList;
	}

	/**
	 * 检查短信余额
	 * 
	 * @return integer
	 */
	public Integer checkBalance() {
		String num = wb.balance(SmsConfig.sn, SmsConfig.md5SnPwd);
		return Integer.parseInt(num);
	}

}
